package com.dp1.pucp.Administracion.Controlador;

import CharliesCookies.MainController;
import com.dp1.pucp.Modelo.Clases.Empleado;
import com.dp1.pucp.Administracion.DAO.RRHHDAO;
import com.dp1.pucp.Administracion.Vista.MantOperarioGUI2;
import com.dp1.pucp.Administracion.Vista.OperarioGUI;
import com.dp1.pucp.Seguridad.DAO.LogDAO;
import com.dp1.pucp.Util.Validaciones;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

public class BuscarRRHHControlador {

    private RRHHDAO m;
    private MantOperarioGUI2 buscarRRHHView;
    private ArrayList<Empleado> lstEmpleado;
    private ArrayList<String> lstEstado;
    private final static int ESTADO_INACTIVO = 2;

    public BuscarRRHHControlador(RRHHDAO dao, MantOperarioGUI2 v) {
        m = dao;
        buscarRRHHView = v;
        int estado = buscarRRHHView.getEstado();
        llenarEstadoCombo();
        buscarRRHHView.addBuscarListener(new listarUsuarios());
        buscarRRHHView.addEditarListener(new editarUsuarioListener(this));
        buscarRRHHView.addNuevoListener(new crearUsuarioListener(this));
        buscarRRHHView.addLimpiarListener(new limpiarListener());
        buscarRRHHView.addELiminarListener(new eliminarListener());

    }

    private void llenarEstadoCombo() {
        lstEstado = m.listarEstadoEmpleado();
        buscarRRHHView.llenaComboEstado(lstEstado);
    }

    public void listarResultados() {
        lstEmpleado = m.listarEmpleado();
        lstEmpleado = this.realizarFiltro(lstEmpleado);
        buscarRRHHView.llenaGrilla(lstEmpleado);
    }

    class listarUsuarios implements ActionListener {

//        private OperarioControlador buc;
//        public listarUsuarios(BuscarRRHHControlador buscarusr) {
        public listarUsuarios() {
            //buc=buscarusr;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            listarResultados();
        }
    }

    class crearUsuarioListener implements ActionListener {

        private BuscarRRHHControlador buc;

        public crearUsuarioListener(BuscarRRHHControlador empleado) {
            buc = empleado;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            OperarioGUI p = new OperarioGUI(buscarRRHHView.getPadre(), true);
            OperarioControlador c = new OperarioControlador(m, p, buc, null);
            LogDAO.insertarLog(MainController.usuario, "Ingresar Agregar Empleado");
            p.setVisible(true);
        }
    }

    class editarUsuarioListener implements ActionListener {

        private BuscarRRHHControlador buc;

        public editarUsuarioListener(BuscarRRHHControlador buscarusr) {
            buc = buscarusr;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            int sel = buscarRRHHView.getFilaSel();
            if (sel != -1) {
                OperarioGUI p = new OperarioGUI(buscarRRHHView.getPadre(), true);
                Empleado u = lstEmpleado.get(sel);
                OperarioControlador c = new OperarioControlador(m, p, buc, u);
                LogDAO.insertarLog(MainController.usuario, "Ingresar Editar Empleado");
                p.setVisible(true);
            } else {
                Validaciones.mostrarMensajeErrorVal("Debe seleccionar un Empleado");
            }
        }
    }

    class limpiarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            buscarRRHHView.LimpiarDatos();
        }
    }

    class eliminarListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            int sel = buscarRRHHView.getFilaSel();
            if (sel != -1) {
                if (buscarRRHHView.solicitarConfirmacion("¿Desea eliminar a:\n "
                        + lstEmpleado.get(sel).getNombre() + " " + lstEmpleado.get(sel).getApPaterno()
                        + " " + lstEmpleado.get(sel).getApMaterno() + "?") == 0) {
                    Empleado u = lstEmpleado.get(sel);
                    u.setEstado(ESTADO_INACTIVO);
                    m.guardarEmpleado(u);
                    buscarRRHHView.mostrarAviso("Se eliminó exitosamente el empleado:\n "
                            + lstEmpleado.get(sel).getNombre() + " " + lstEmpleado.get(sel).getApPaterno()
                            + " " + lstEmpleado.get(sel).getApMaterno());
                    LogDAO.insertarLog(MainController.usuario, "Eliminar Empleado");
                }
            } else {
                buscarRRHHView.mostrarError("Debe seleccionar un empleado");
            }
        }
    }
    
    public ArrayList<Empleado> realizarFiltro(ArrayList<Empleado> lista) {
        ArrayList<Empleado> listEmpleado = new ArrayList<>();
        ArrayList<Empleado> tempListEmpleado;

        tempListEmpleado = lista;
        if (buscarRRHHView.getEstado() != 0) {
            for (int i = 0; i < tempListEmpleado.size(); i++) {
                if (tempListEmpleado.get(i).getEstado() == buscarRRHHView.getEstado()) {
                    listEmpleado.add(tempListEmpleado.get(i));
                }
            }
        } else {
            listEmpleado = tempListEmpleado;
        }


        tempListEmpleado = listEmpleado;
        listEmpleado = new ArrayList<>();

        if (!buscarRRHHView.getNombre().equalsIgnoreCase("")) {

            for (int i = 0; i < tempListEmpleado.size(); i++) {
                if (tempListEmpleado.get(i).getNombre().toUpperCase().contains(buscarRRHHView.getNombre().toUpperCase())) {
                    listEmpleado.add(tempListEmpleado.get(i));
                }
            }
        } else {
            listEmpleado = tempListEmpleado;
        }

        tempListEmpleado = listEmpleado;
        listEmpleado = new ArrayList<>();


        if (!buscarRRHHView.getCodigo().equalsIgnoreCase("")) {

            for (int i = 0; i < tempListEmpleado.size(); i++) {
                if (tempListEmpleado.get(i).getCodigo().toUpperCase().contains(buscarRRHHView.getCodigo().toUpperCase())) {
                    listEmpleado.add(tempListEmpleado.get(i));
                }
            }
        } else {
            listEmpleado = tempListEmpleado;
        }

        tempListEmpleado = listEmpleado;
        listEmpleado = new ArrayList<>();


        if (!buscarRRHHView.getNumDocumento().equalsIgnoreCase("")) {

            for (int i = 0; i < tempListEmpleado.size(); i++) {
                if (tempListEmpleado.get(i).getNumdocumento().toUpperCase().contains(buscarRRHHView.getNumDocumento().toUpperCase())) {
                    listEmpleado.add(tempListEmpleado.get(i));
                }
            }
        } else {
            listEmpleado = tempListEmpleado;
        }

        return listEmpleado;
    }
}
